"""
Python的并发中,分为多线程,多进程和多协程三种
那么什么时候用哪种并发比较合适呢?
首先我们要分清, 什么是CPU密集型计算和IO密集型计算
CPU密集型(CPU-bound): 意思为程序运行时, CPU的运算效率将会成为瓶颈, 制约程序执行的速率
例如: 压缩和解压, 加密和解密, 正则表达式的搜索等 需要执行大量计算的操作
IO密集型(I/O-bound): 同理, IO操作将会成为程序执行速度的主要制约
例如: 文件处理, 网络爬虫, 读写数据库等 需要大量网络或者文件的读写操作

多进程(Process, multi-processing):
一个进程中可以包含和启动多个线程
可以使用多核CPU并行计算, 但占用资源最多, 可启动数目比线程少
适用于: CPU密集型计算

多线程(Thread, threading):
一个线程中可以包含和启动多个协程
相比进程: 更轻量级, 占用更少资源
        但是python中的多线程只能并发执行, 不能利用多CPU, 由于GIL(Global Interpreter Lock全局解释器锁)
相比协程: 启动数目有限制, 占用内存资源, 有线程切换的开销
适用于: IO密集型计算, 并且同时运行的任务数目不要太多

多协程(Coroutine, asyncio)
内存开销最小, 启动协程数量最多
但有的库并不支持, 代码实现最复杂
适用于: IO密集型计算
"""
